package com.goldman.distributed.common.ratelimit.annotation;

import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;

import java.lang.annotation.*;

/**
 * @author Bin
 * @date 2023/12/13
 */
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RedissonRateLimiter {
    /**
     * 限流模式，默认全局
     *
     * @return
     */
    RateType mode() default RateType.OVERALL;

    /**
     * Spel表达式
     *
     * @return
     */
    String[] keys() default {};

    long rate() default 100;

    /**
     * 时间间隔，默认1秒
     *
     * @return
     */
    long rateInterval() default 1;

    RateIntervalUnit intervalUnit() default RateIntervalUnit.SECONDS;
}
